🌎 rns.kin.earth git 🌍
tests/ifac.py live_profiling (dca5b963) Text, 11.26 KB
Tff7b72import T7ee787unittest
Tff7b72import T7ee787os
Tff7b72import T7ee787time
Tff7b72import T7ee787random
Tff7b72import T7ee787RNS
Tff7b72from T7ee787RNS Tff7b72import Te6edf3Transport
Te6edf3IFAC_TEST_SEED Tff7b72= T79c0ff0x1FACAD3
Te6edf3IFAC_NETNAME Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffrns-ifac-test-netTa5d6ff"
Tff7b72def Td2a8ffrand_bytesTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3lengthTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657bytesTb4b4b4(Te6edf3rngTff7b72.Td2a8ffrandrangeTb4b4b4(T79c0ff256Tb4b4b4) Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3lengthTb4b4b4)Tb4b4b4)
Tff7b72class T56d364FakeInterfaceTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3ifac_sizeTb4b4b4, Te6edf3ifac_keyTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffifac_size Tff7b72= Te6edf3ifac_size
Tff7b72selfTff7b72.Td2a8ffifac_key Tff7b72= Te6edf3ifac_key
Tff7b72selfTff7b72.Td2a8ffifac_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_bytesTb4b4b4(Te6edf3ifac_keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffviolations Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffifac_violationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptionTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffviolationsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3descriptionTb4b4b4)
Tff7b72def Td2a8ffmake_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)Tb4b4b4:
Te6edf3ifac_key Tff7b72= Te6edf3RNSTff7b72.Td2a8ffCryptographyTff7b72.Td2a8ffhkdfTb4b4b4(Te6edf3lengthTff7b72=T79c0ff64Tb4b4b4, Te6edf3derive_fromTff7b72=Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Te6edf3IFAC_NETNAMETb4b4b4)Tb4b4b4,
Te6edf3saltTff7b72=Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffIFAC_SALTTb4b4b4, Te6edf3contextTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72return Te6edf3FakeInterfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4, Te6edf3ifac_keyTb4b4b4)
Tff7b72def Td2a8ffmake_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3patternTff7b72=Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)Tb4b4b4:
T8b949e"""Generate a deterministic protocol-realistic packet: a random or
structured payload with the IFAC flag bit of the first header byte
clear (as plaintext frames always have)."""
Tff7b72if Te6edf3pattern Tff7b72== Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4: Te6edf3raw Tff7b72= Te6edf3rand_bytesTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4)
Tff7b72elif Te6edf3pattern Tff7b72== Ta5d6ff"Ta5d6ffzerosTa5d6ff"Tb4b4b4: Te6edf3raw Tff7b72= Tffa657bytesTb4b4b4(Te6edf3sizeTb4b4b4)
Tff7b72elif Te6edf3pattern Tff7b72== Ta5d6ff"Ta5d6ffonesTa5d6ff"Tb4b4b4: Te6edf3raw Tff7b72= Tffa657bytesTb4b4b4(Tb4b4b4[T79c0ff0xFFTb4b4b4]Tb4b4b4) Tff7b72* Te6edf3size
Tff7b72elif Te6edf3pattern Tff7b72== Ta5d6ff"Ta5d6ffseqTa5d6ff"Tb4b4b4: Te6edf3raw Tff7b72= Tffa657bytesTb4b4b4(Tb4b4b4(Te6edf3i Tff7b72% T79c0ff256Tb4b4b4) Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUnknown pattern Tffd700{Te6edf3patternTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3raw Tff7b72= Tffa657bytearrayTb4b4b4(Te6edf3rawTb4b4b4)
Te6edf3rawTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72&Tff7b72= T79c0ff0x7F
Tff7b72return Tffa657bytesTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72class T56d364TestIFACTb4b4b4(Te6edf3unittestTff7b72.Td2a8ffTestCaseTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8fftest_01_outgoing_parityTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3rng Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Te6edf3IFAC_TEST_SEEDTb4b4b4)
Te6edf3sizes Tff7b72= Tb4b4b4[T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff32Tb4b4b4, T79c0ff100Tb4b4b4, T79c0ff500Tb4b4b4, T79c0ff1064Tb4b4b4, T79c0ff4096Tb4b4b4, T79c0ff16384Tb4b4b4]
Te6edf3ifac_sizes Tff7b72= Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4]
Te6edf3patterns Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffzerosTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffonesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffseqTa5d6ff"Tb4b4b4]
Te6edf3verified Tff7b72= T79c0ff0
Tff7b72for Te6edf3size Tff7b72in Te6edf3sizesTb4b4b4:
Tff7b72for Te6edf3ifac_size Tff7b72in Te6edf3ifac_sizesTb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)
Tff7b72for Te6edf3pattern Tff7b72in Te6edf3patternsTb4b4b4:
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3patternTb4b4b4)
Te6edf3out_new Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3out_leg Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4, Te6edf3out_legTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3out_newTb4b4b4)Tb4b4b4, Te6edf3size Tff7b72+ Te6edf3ifac_sizeTb4b4b4)
Te6edf3verified Tff7b72+Tff7b72= T79c0ff1
Tff7b72for Te6edf3ifac_size Tff7b72in Tb4b4b4(T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, T79c0ff262144Tb4b4b4, Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)
Te6edf3out_new Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3out_leg Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4, Te6edf3out_legTb4b4b4)
Te6edf3verified Tff7b72+Tff7b72= T79c0ff1
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffIFAC outgoing parity: Tffd700{Te6edf3verifiedTffd700}Ta5d6ff deterministic cases verifiedTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_02_incoming_parityTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3rng Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Te6edf3IFAC_TEST_SEED Tff7b72^ T79c0ff0x1FACTb4b4b4)
Te6edf3sizes Tff7b72= Tb4b4b4[T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4, T79c0ff32Tb4b4b4, T79c0ff100Tb4b4b4, T79c0ff500Tb4b4b4, T79c0ff1064Tb4b4b4, T79c0ff4096Tb4b4b4, T79c0ff16384Tb4b4b4]
Te6edf3ifac_sizes Tff7b72= Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4]
Te6edf3patterns Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffzerosTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffonesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffseqTa5d6ff"Tb4b4b4]
Te6edf3verified Tff7b72= T79c0ff0
Tff7b72for Te6edf3size Tff7b72in Te6edf3sizesTb4b4b4:
Tff7b72for Te6edf3ifac_size Tff7b72in Te6edf3ifac_sizesTb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)
Tff7b72for Te6edf3pattern Tff7b72in Te6edf3patternsTb4b4b4:
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3patternTb4b4b4)
Te6edf3frame Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3ok_newTb4b4b4, Te6edf3out_new Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3ok_legTb4b4b4, Te6edf3out_leg Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3ok_newTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3ok_legTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4, Te6edf3out_legTb4b4b4)
Te6edf3verified Tff7b72+Tff7b72= T79c0ff1
Tff7b72for Te6edf3ifac_size Tff7b72in Tb4b4b4(T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4)Tb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, T79c0ff262144Tb4b4b4, Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)
Te6edf3frame Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3ok_newTb4b4b4, Te6edf3out_new Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3ok_legTb4b4b4, Te6edf3out_leg Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3ok_newTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3ok_legTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4, Te6edf3out_legTb4b4b4)
Te6edf3verified Tff7b72+Tff7b72= T79c0ff1
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffIFAC incoming parity: Tffd700{Te6edf3verifiedTffd700}Ta5d6ff deterministic cases verifiedTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_03_roundtripTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3rng Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Te6edf3IFAC_TEST_SEED Tff7b72^ T79c0ff0x0FACTb4b4b4)
T8b949e# All four TX/RX handler combinations must recover the original packet
Te6edf3combos Tff7b72= Tb4b4b4[
Tb4b4b4(Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4, Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4, Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4, Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4, Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4)Tb4b4b4,
Tb4b4b4]
Te6edf3sizes Tff7b72= Tb4b4b4[T79c0ff16Tb4b4b4, T79c0ff1064Tb4b4b4, T79c0ff16384Tb4b4b4]
Te6edf3ifac_sizes Tff7b72= Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4]
Te6edf3verified Tff7b72= T79c0ff0
Tff7b72for Te6edf3txTb4b4b4, Te6edf3rx Tff7b72in Te6edf3combosTb4b4b4:
Tff7b72for Te6edf3size Tff7b72in Te6edf3sizesTb4b4b4:
Tff7b72for Te6edf3ifac_size Tff7b72in Te6edf3ifac_sizesTb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)
Te6edf3frame Tff7b72= Te6edf3txTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3okTb4b4b4, Te6edf3out Tff7b72= Te6edf3rxTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3okTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3outTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3verified Tff7b72+Tff7b72= T79c0ff1
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffIFAC round-trip: Tffd700{Te6edf3verifiedTffd700}Ta5d6ff deterministic TX/RX combinations verifiedTffea00\nTa5d6ff All four handler pairings recover the packet exactly.Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_04_invariantsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3rng Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Te6edf3IFAC_TEST_SEED Tff7b72^ T79c0ff0xCAFETb4b4b4)
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72for Te6edf3size Tff7b72in Tb4b4b4(T79c0ff16Tb4b4b4, T79c0ff1064Tb4b4b4, T79c0ff16384Tb4b4b4)Tb4b4b4:
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)
Te6edf3out_new Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3out_leg Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
T8b949e# IFAC flag must be set on the masked frame
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72& T79c0ff0x80Tb4b4b4, T79c0ff0x80Tb4b4b4)
T8b949e# The IFAC tag region must be transmitted in the clear and
T8b949e# identical in both implementations
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4[T79c0ff2Tb4b4b4:T79c0ff2Tff7b72+Te6edf3ifaceTff7b72.Td2a8ffifac_sizeTb4b4b4]Tb4b4b4, Te6edf3out_legTb4b4b4[T79c0ff2Tb4b4b4:T79c0ff2Tff7b72+Te6edf3ifaceTff7b72.Td2a8ffifac_sizeTb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4[T79c0ff2Tb4b4b4:T79c0ff2Tff7b72+Te6edf3ifaceTff7b72.Td2a8ffifac_sizeTb4b4b4]Tb4b4b4, Te6edf3ifaceTff7b72.Td2a8ffifac_identityTff7b72.Td2a8ffsignTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4[Tff7b72-Te6edf3ifaceTff7b72.Td2a8ffifac_sizeTb4b4b4:Tb4b4b4]Tb4b4b4)
T8b949e# Second header byte must be masked identically
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3out_legTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
T8b949e# The incoming handler must clear the IFAC flag in its output
Te6edf3okTb4b4b4, Te6edf3out Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4(Te6edf3out_newTb4b4b4, Te6edf3ifaceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3okTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3outTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72& T79c0ff0x80Tb4b4b4, T79c0ff0Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffIFAC invariants: flag set on frame, tag in clear and identical, flag cleared on input recoveryTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_05_invalid_tagsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3rng Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Te6edf3IFAC_TEST_SEED Tff7b72^ T79c0ff0xBADTb4b4b4)
Te6edf3sizes Tff7b72= Tb4b4b4[T79c0ff100Tb4b4b4, T79c0ff1064Tb4b4b4, T79c0ff16384Tb4b4b4]
Te6edf3ifac_sizes Tff7b72= Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff8Tb4b4b4, T79c0ff16Tb4b4b4]
Tff7b72for Te6edf3size Tff7b72in Te6edf3sizesTb4b4b4:
Tff7b72for Te6edf3ifac_size Tff7b72in Te6edf3ifac_sizesTb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(Te6edf3ifac_sizeTb4b4b4)
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)
Te6edf3frame Tff7b72= Tffa657bytearrayTb4b4b4(Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)Tb4b4b4)
Te6edf3corruptions Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e# Corrupt a masked payload byte
Te6edf3corrupted Tff7b72= Tffa657bytearrayTb4b4b4(Te6edf3frameTb4b4b4)
Te6edf3corruptedTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4] Tff7b72^Tff7b72= T79c0ff0x01
Te6edf3corruptionsTff7b72.Td2a8ffappendTb4b4b4(Tffa657bytesTb4b4b4(Te6edf3corruptedTb4b4b4)Tb4b4b4)
T8b949e# Corrupt the second header byte
Te6edf3corrupted Tff7b72= Tffa657bytearrayTb4b4b4(Te6edf3frameTb4b4b4)
Te6edf3corruptedTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72^Tff7b72= T79c0ff0x40
Te6edf3corruptionsTff7b72.Td2a8ffappendTb4b4b4(Tffa657bytesTb4b4b4(Te6edf3corruptedTb4b4b4)Tb4b4b4)
T8b949e# Corrupt a byte in the IFAC tag region
Tff7b72if Te6edf3ifac_size Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3corrupted Tff7b72= Tffa657bytearrayTb4b4b4(Te6edf3frameTb4b4b4)
Te6edf3corruptedTb4b4b4[T79c0ff2 Tff7b72+ Te6edf3ifac_sizeTff7b72/Tff7b72/T79c0ff2Tb4b4b4] Tff7b72^Tff7b72= T79c0ff0x01
Te6edf3corruptionsTff7b72.Td2a8ffappendTb4b4b4(Tffa657bytesTb4b4b4(Te6edf3corruptedTb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3corrupted Tff7b72in Te6edf3corruptionsTb4b4b4:
Te6edf3ok_newTb4b4b4, Te6edf3out_new Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4(Te6edf3corruptedTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3ok_legTb4b4b4, Te6edf3out_leg Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4(Te6edf3corruptedTb4b4b4, Te6edf3ifaceTb4b4b4)
T8b949e# Both implementations must behave identically on any
T8b949e# corrupted frame, including the violation report
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3ok_newTb4b4b4, Te6edf3ok_legTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3out_newTb4b4b4, Te6edf3out_legTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3ifaceTff7b72.Td2a8ffviolationsTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4:Tb4b4b4]Tb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffInvalid IFAC on packetTa5d6ff"Tb4b4b4]Tb4b4b4)
T8b949e# With >= 8 bytes of tag entropy, rejection is
T8b949e# deterministic. At ifac_size = 1 the truncated tag has
T8b949e# only 8 bits, so a corrupted frame can statistically
T8b949e# collide with the original truncation (1/256) - both
T8b949e# implementations behave identically either way.
Tff7b72if Te6edf3ifac_size Tff7b72>Tff7b72= T79c0ff8Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(Te6edf3ok_newTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffIFAC invalid tags: behaviour and violation reporting identical Ta5d6ff"
Ta5d6ff"Ta5d6ffbetween implementations; deterministic rejection verified for Ta5d6ff"
Ta5d6ff"Ta5d6ff8+ byte tagsTa5d6ff"Tb4b4b4)
Tf0883e@unittestTff7b72.Td2a8ffskipIfTb4b4b4(Te6edf3osTff7b72.Td2a8ffgetenvTb4b4b4(Ta5d6ff"Ta5d6ffRNS_SKIP_PERF_TESTSTa5d6ff"Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ffSkipping performance testsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_06_benchmarkTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3rng Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Te6edf3IFAC_TEST_SEED Tff7b72^ T79c0ff0xBEEFTb4b4b4)
Te6edf3sizes Tff7b72= Tb4b4b4[T79c0ff1500Tb4b4b4, T79c0ff16384Tb4b4b4, T79c0ff262144Tb4b4b4]
Te6edf3runs Tff7b72= Tb4b4b4{T79c0ff1500Tb4b4b4: T79c0ff30Tb4b4b4, T79c0ff16384Tb4b4b4: T79c0ff15Tb4b4b4, T79c0ff262144Tb4b4b4: T79c0ff5Tb4b4b4}
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffIFAC handler benchmark (optimized vs legacy):Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Ta5d6ff'Ta5d6ffsizeTa5d6ff'Tffd700:Ta5d6ff>8Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffout lgcTa5d6ff'Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffout optTa5d6ff'Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffout spdTa5d6ff'Tffd700:Ta5d6ff>8Tffd700}Ta5d6ff | Ta5d6ff"
Ta5d6fffTa5d6ff"Tffd700{Ta5d6ff'Ta5d6ffin lgcTa5d6ff'Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffin newTa5d6ff'Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Ta5d6ff'Ta5d6ffin spdTa5d6ff'Tffd700:Ta5d6ff>8Tffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff-Ta5d6ff" Tff7b72* T79c0ff84Tb4b4b4)
Te6edf3total_leg Tff7b72= Te6edf3total_new Tff7b72= T79c0ff0.0
Tff7b72for Te6edf3size Tff7b72in Te6edf3sizesTb4b4b4:
Te6edf3iface Tff7b72= Te6edf3make_interfaceTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3raw Tff7b72= Te6edf3make_plain_packetTb4b4b4(Te6edf3rngTb4b4b4, Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffrandomTa5d6ff"Tb4b4b4)
Te6edf3frame Tff7b72= Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3n Tff7b72= Te6edf3runsTb4b4b4[Te6edf3sizeTb4b4b4]
T8b949e# Warmup
Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3t0 Tff7b72= Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4: Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifac_legacyTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3out_leg Tff7b72= Tb4b4b4(Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3t0Tb4b4b4) Tff7b72/ Te6edf3n
Te6edf3t0 Tff7b72= Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4: Te6edf3TransportTff7b72.Td2a8ffhandle_outgoing_ifacTb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3rawTb4b4b4)
Te6edf3out_new Tff7b72= Tb4b4b4(Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3t0Tb4b4b4) Tff7b72/ Te6edf3n
Te6edf3t0 Tff7b72= Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4: Te6edf3TransportTff7b72.Td2a8ffhandle_ifac_legacyTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3in_leg Tff7b72= Tb4b4b4(Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3t0Tb4b4b4) Tff7b72/ Te6edf3n
Te6edf3t0 Tff7b72= Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4: Te6edf3TransportTff7b72.Td2a8ffhandle_ifacTb4b4b4(Te6edf3frameTb4b4b4, Te6edf3ifaceTb4b4b4)
Te6edf3in_new Tff7b72= Tb4b4b4(Te6edf3timeTff7b72.Td2a8ffperf_counterTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3t0Tb4b4b4) Tff7b72/ Te6edf3n
Te6edf3total_leg Tff7b72+Tff7b72= Te6edf3out_leg Tff7b72+ Te6edf3in_leg
Te6edf3total_new Tff7b72+Tff7b72= Te6edf3out_new Tff7b72+ Te6edf3in_new
Tff7b72def Td2a8ffmsTb4b4b4(Te6edf3tTb4b4b4)Tb4b4b4: Tff7b72return Ta5d6fffTa5d6ff"Tffd700{Te6edf3tTff7b72*T79c0ff1000Tffd700:Ta5d6ff.3fTffd700}Ta5d6ffmTa5d6ff"
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3sizeTffd700:Ta5d6ff>8Tffd700}Ta5d6ff Tffd700{Te6edf3msTb4b4b4(Te6edf3out_legTb4b4b4)Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Te6edf3msTb4b4b4(Te6edf3out_newTb4b4b4)Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Te6edf3out_legTff7b72/Te6edf3out_newTffd700:Ta5d6ff7.1fTffd700}Ta5d6ffx | Ta5d6ff"
Ta5d6fffTa5d6ff"Tffd700{Te6edf3msTb4b4b4(Te6edf3in_legTb4b4b4)Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Te6edf3msTb4b4b4(Te6edf3in_newTb4b4b4)Tffd700:Ta5d6ff>11Tffd700}Ta5d6ff Tffd700{Te6edf3in_legTff7b72/Te6edf3in_newTffd700:Ta5d6ff7.1fTffd700}Ta5d6ffxTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffCombined TX+RX at Tffd700{Te6edf3sizesTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tffd700}Ta5d6ff bytes: legacy Ta5d6ff"
Ta5d6fffTa5d6ff"Tffd700{Tb4b4b4(Te6edf3out_legTff7b72+Te6edf3in_legTb4b4b4)Tff7b72*T79c0ff1000Tffd700:Ta5d6ff.2fTffd700}Ta5d6ff ms/pkt, optimized Tffd700{Tb4b4b4(Te6edf3out_newTff7b72+Te6edf3in_newTb4b4b4)Tff7b72*T79c0ff1000Tffd700:Ta5d6ff.2fTffd700}Ta5d6ff ms/pkt, Ta5d6ff"
Ta5d6fffTa5d6ff"Tffd700{Tb4b4b4(Te6edf3out_legTff7b72+Te6edf3in_legTb4b4b4)Tff7b72/Tb4b4b4(Te6edf3out_newTff7b72+Te6edf3in_newTb4b4b4)Tffd700:Ta5d6ff.1fTffd700}Ta5d6ffx speedupTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffOverall speedup across benchmarks: Tffd700{Te6edf3total_legTff7b72/Te6edf3total_newTffd700:Ta5d6ff.1fTffd700}Ta5d6ffxTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3unittestTff7b72.Td2a8ffmainTb4b4b4(Te6edf3verbosityTff7b72=T79c0ff2Tb4b4b4)
Served by rngit 1.5.2 - Generated in 0.08s